#ifndef SCRIPT_PARSER_H
#define SCRIPT_PARSER_H

#include <global.h>
#include <optional>
#include <scripting/script_header.h>

namespace script
{
class ScriptParserData;
/**
 * @brief:  语法分析器
 * @author: sherlock_lht
 */
class ScriptParser
{
public:
    explicit ScriptParser();
    ~ScriptParser();

    /**
     * @brief:  解析token
     * @author: sherlock_lht
     */
    std::optional<ASTNode> parse(const Tokens &tokens);

    /**
     * @brief:  获取语法错误的token和错误信息
     * @note:   如果没有错误，则token为第一个token，error_msg为空
     * @author: sherlock_lht
     */
    void getErrorInfo(Token *error_token, std::string *error_msg) const;

private:
    DECLARE_DATA(ScriptParser)
};

}

#endif //SCRIPT_PARSER_H
